উদাহরণ সহ Multiple DataSource ব্যবস্থাপনা

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Spring Boot এবং Multiple DataSource
186

Spring Boot ORM (Object Relational Mapping) একটি শক্তিশালী ফ্রেমওয়ার্ক, যা ডেটাবেসের সাথে কার্যকরীভাবে কাজ করতে সহায়তা করে। Spring Boot ব্যবহার করে একাধিক (Multiple) ডেটাবেস সংযোগ পরিচালনা করা সম্ভব, যা বিশেষত বিভিন্ন ডেটাবেস ব্যবহার করার প্রয়োজন হলে কার্যকরী হতে পারে।

ORM (Object Relational Mapping) প্যাটার্নে, ডেটাবেসের টেবিলগুলিকে জাভা অবজেক্টের সাথে ম্যাপ করা হয়। Spring Boot এই কাজটি অত্যন্ত সহজ করে তোলে, এবং এই প্রক্রিয়া খুবই কার্যকরী। Spring Boot এ Multiple DataSource ব্যবস্থাপনা করা হলে, বিভিন্ন ডেটাবেসের সাথে একযোগে কাজ করা সম্ভব হয়।


Multiple DataSource ব্যবস্থাপনা কী?

Multiple DataSource ব্যবস্থাপনা এমন একটি প্রক্রিয়া, যেখানে একাধিক ডেটাবেসের সাথে সম্পর্কিত সংযোগ একাধিক DataSource তৈরি করে পরিচালনা করা হয়। Spring Boot সাধারণত একটি ডেটাবেস ব্যবহার করলেও, যখন একাধিক ডেটাবেসের সাথে কাজ করার প্রয়োজন হয়, তখন Spring Boot বিভিন্ন কনফিগারেশন মাধ্যমে এই ব্যবস্থা চালু করতে সাহায্য করে।


Multiple DataSource কনফিগারেশন

Spring Boot এ Multiple DataSource কনফিগারেশনের জন্য সাধারণত দুইটি প্রধান উপাদান প্রয়োজন:

  1. DataSource Configuration (ডেটাসোর্স কনফিগারেশন)
  2. Transaction Manager Configuration (ট্রানজ্যাকশন ম্যানেজার কনফিগারেশন)

এই দুটি উপাদানকে কনফিগার করা হয় যাতে দুইটি বা ততোধিক ডেটাবেসের সাথে সঠিকভাবে কাজ করা যায়।


উদাহরণ সহ Multiple DataSource কনফিগারেশন

ধরা যাক, আমাদের দুটি আলাদা ডেটাবেস রয়েছে — primaryDataSource এবং secondaryDataSource। নিচে তাদের জন্য কনফিগারেশন এবং উদাহরণ দেওয়া হলো:

১. Application Properties ফাইল কনফিগারেশন

প্রথমে, application.properties বা application.yml ফাইলে ডেটাবেসের সংযোগ সেটআপ করতে হবে।

# Primary DataSource Configuration
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.jpa.hibernate.ddl-auto=update
spring.datasource.primary.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy

# Secondary DataSource Configuration
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.jpa.hibernate.ddl-auto=update
spring.datasource.secondary.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy

২. DataSource কনফিগারেশন ক্লাস তৈরি করা

এখন, আমরা দুটি আলাদা DataSource কনফিগারেশন ক্লাস তৈরি করব।

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackages = "com.example.repository.primary",
    entityManagerFactoryRef = "primaryEntityManagerFactory",
    transactionManagerRef = "primaryTransactionManager"
)
public class PrimaryDataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "primaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder, 
            @Qualifier("primaryDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.model.primary")
                .persistenceUnit("primary")
                .build();
    }

    @Primary
    @Bean(name = "primaryTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("primaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

এখানে @Primary অ্যানোটেশন ব্যবহার করা হয়েছে, যা Spring Boot কে নির্দেশ করে যে, এটি প্রধান DataSource হিসেবে কাজ করবে। আর দ্বিতীয় DataSource এর জন্য একটি আলাদা কনফিগারেশন ক্লাস তৈরি করা হবে।

৩. Secondary DataSource কনফিগারেশন

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackages = "com.example.repository.secondary",
    entityManagerFactoryRef = "secondaryEntityManagerFactory",
    transactionManagerRef = "secondaryTransactionManager"
)
public class SecondaryDataSourceConfig {

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder, 
            @Qualifier("secondaryDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.model.secondary")
                .persistenceUnit("secondary")
                .build();
    }

    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

৪. Repository কনফিগারেশন

প্রতিটি ডেটাবেসের জন্য আলাদা Repository ইন্টারফেস থাকবে, যেখানে @EnableJpaRepositories ব্যবহার করে প্রতিটি ডেটাবেসের জন্য আলাদা EntityManagerFactory এবং TransactionManager কনফিগার করা হয়।

public interface PrimaryRepository extends JpaRepository<PrimaryEntity, Long> {
}

public interface SecondaryRepository extends JpaRepository<SecondaryEntity, Long> {
}

সারাংশ

Spring Boot ORM ব্যবহার করে Multiple DataSource কনফিগারেশন সম্পন্ন করার মাধ্যমে একাধিক ডেটাবেসের সাথে সহজেই কাজ করা সম্ভব। এই কনফিগারেশনটি Java এর Spring Framework এর শক্তিশালী ORM পদ্ধতিকে ব্যবহার করে, যা ডেটাবেস সম্পর্কিত কার্যক্রমকে খুবই সহজ এবং কার্যকর করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...